/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.recl;

import com.perutaxi.entidades.eClienteReclamo;
import com.perutaxi.entidades.eEmpresaTaxista;
import com.perutaxi.entidades.eSolicitudReclamo;
import com.perutaxi.entidades.eTaxistaReclamo;
import com.perutaxi.negocio.nClienteReclamo;
import com.perutaxi.negocio.nEmpresaTaxista;
import com.perutaxi.negocio.nSolicitudReclamo;
import com.perutaxi.negocio.nTaxistaReclamo;
import com.perutaxi.util.GenericMBean;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author PeruTaxi
 */
@ManagedBean
@SessionScoped
public class SolicitudReclamoMBean extends GenericMBean implements Serializable {

    private eSolicitudReclamo solReclamoFiltro;
    private eSolicitudReclamo solReclamo;
    private List<eSolicitudReclamo> lista;
    private int accion; //1:nuevo, 2:editar, 3:ver
    private String titulo; //titulo del panel
    private final String url = "/pages/recl/solReclamo/solicitudReclamo.xhtml";
    private final String urlLista = "/pages/recl/solReclamo/listaSolicitudReclamo.xhtml";
    private SelectItem[] siEstadosFiltro;

    public SolicitudReclamoMBean() {
    }

    public String iniciar() {
        solReclamoFiltro = new eSolicitudReclamo();
        solReclamoFiltro.setEstado("");
        lista = null;

        return this.urlLista;
    }

    public void buscar(ActionEvent ae) {
        try {
            this.lista = nSolicitudReclamo.obtenerSolReclamo(this.solReclamoFiltro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String editar() {
        this.accion = 2;
        this.titulo = "ACTUALIZAR SOLICITUD DE RECLAMO";

        return this.url;
    }

    public String ver() {
        this.accion = 3;
        this.titulo = "VER SOLICITUD DE RECLAMO";

        return this.url;
    }

    public String guardar() {
        if (this.accion == 2) {
            try {
                if (nSolicitudReclamo.actualizar(this.solReclamo)) {
                    showMessage("SE HA GUARDADO CORRECTAMENTE");
                    return this.editar();
                } else {
                    showError("ERROR AL MOMENTO DE GUARDAR");
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return "";
    }
    
    public void aceptarReclamo() {
        this.solReclamo.setEstado("A");
        try {
            if (nSolicitudReclamo.actualizar(this.solReclamo)) {
                agregarReclamoCliente(this.solReclamo);
                agregarReclamoTaxista(this.solReclamo);
                this.solReclamo = nSolicitudReclamo.obtenerPorId(this.solReclamo.getId());
                showMessage("SE HA GUARDADO CORRECTAMENTE");
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }
    
    private void agregarReclamoTaxista(eSolicitudReclamo solReclamo) throws Exception {
        eTaxistaReclamo taxReclamo = nTaxistaReclamo.inicializar();
        eEmpresaTaxista taxista = nEmpresaTaxista.obtenerPorDni(solReclamo.getDniTaxista());
        Long id = Long.valueOf(nTaxistaReclamo.obtenerTodos().size() + 1);
        taxReclamo.setId(id);
        taxReclamo.setTaxista(taxista);
        taxReclamo.setCliente(solReclamo.getCliente());
        taxReclamo.setFechaReclamo(solReclamo.getFechaIncidente());
        taxReclamo.setMotivo(solReclamo.getMotivo());
        taxReclamo.setComentario(solReclamo.getComentario());
        taxReclamo.setEstado(solReclamo.getEstado());
        nTaxistaReclamo.guardar(taxReclamo);
        taxista.setCantReclamos(taxista.getCantReclamos() + 1);
        nEmpresaTaxista.actualizar(taxista);
    }
    
    private void agregarReclamoCliente(eSolicitudReclamo solReclamo) throws Exception {
        eClienteReclamo clieReclamo = nClienteReclamo.inicializar();
        eEmpresaTaxista taxista = nEmpresaTaxista.obtenerPorDni(solReclamo.getDniTaxista());
        Long id = Long.valueOf(nClienteReclamo.obtenerTodos().size() + 1);
        clieReclamo.setId(id);
        clieReclamo.setCliente(solReclamo.getCliente());
        clieReclamo.setNombreTaxista(taxista.getNombres());
        clieReclamo.setApPaternoTaxista(taxista.getApPaterno());
        clieReclamo.setApMaternoTaxista(taxista.getApMaterno());
        clieReclamo.setDniTaxista(solReclamo.getDniTaxista());
        clieReclamo.setFechaIncidente(solReclamo.getFechaIncidente());
        clieReclamo.setComentario(solReclamo.getComentario());
        clieReclamo.setMotivo(solReclamo.getMotivo());
        clieReclamo.setEstado(solReclamo.getEstado());
        nClienteReclamo.guardar(clieReclamo);
    }
    
    public void rechazarReclamo() {
        this.solReclamo.setEstado("R");
        try {
            if (nSolicitudReclamo.actualizar(this.solReclamo)) {
                agregarReclamoCliente(this.solReclamo);
                this.solReclamo = nSolicitudReclamo.obtenerPorId(this.solReclamo.getId());
                showMessage("SE HA GUARDADO CORRECTAMENTE");
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }
    
    public void infundadoReclamo() {
        this.solReclamo.setEstado("I");
        try {
            if (nSolicitudReclamo.actualizar(this.solReclamo)) {
                agregarReclamoCliente(this.solReclamo);
                this.solReclamo = nSolicitudReclamo.obtenerPorId(this.solReclamo.getId());
                showMessage("SE HA GUARDADO CORRECTAMENTE");
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }
    
    public void invalidoReclamo() {
        this.solReclamo.setEstado("N");
        try {
            if (nSolicitudReclamo.actualizar(this.solReclamo)) {
                this.solReclamo = nSolicitudReclamo.obtenerPorId(this.solReclamo.getId());
                showMessage("SE HA GUARDADO CORRECTAMENTE");
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }

    public String retroceder() {
        buscar(null);
        return this.urlLista;
    }

    public eSolicitudReclamo getSolReclamoFiltro() {
        return solReclamoFiltro;
    }

    public void setSolReclamoFiltro(eSolicitudReclamo solReclamoFiltro) {
        this.solReclamoFiltro = solReclamoFiltro;
    }

    public eSolicitudReclamo getSolReclamo() {
        return solReclamo;
    }

    public void setSolReclamo(eSolicitudReclamo solReclamo) {
        this.solReclamo = solReclamo;
    }

    public List<eSolicitudReclamo> getLista() {
        return lista;
    }

    public void setLista(List<eSolicitudReclamo> lista) {
        this.lista = lista;
    }

    public int getAccion() {
        return accion;
    }

    public void setAccion(int accion) {
        this.accion = accion;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public SelectItem[] getSiEstadosFiltro() {
        SelectItem[] si = new SelectItem[6];
        si[0] = new SelectItem("*", "*");
        si[1] = new SelectItem("P", "PENDIENTE");
        si[2] = new SelectItem("A", "ACEPTADO");
        si[3] = new SelectItem("R", "RECHAZADO");
        si[4] = new SelectItem("I", "INFUNDADO");
        si[5] = new SelectItem("N", "NO VÁLIDO");
        siEstadosFiltro = si;

        return siEstadosFiltro;
    }

    public void setSiEstadosFiltro(SelectItem[] siEstadosFiltro) {
        this.siEstadosFiltro = siEstadosFiltro;
    }
}
